<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta name="author" content="wangbo">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>

    //     // 上面的函数有两个代码块，都声明了变量 n ，运行后输出5。这表示外层代码块不受内层代码块的影响。如果使用 var 定义
    //     // 变量 n ，最后输出的值就是10
    //     function f() { console.log('I am outside!'); }
    //     (function () {
    //       if (false) {
    //         // 重复声明一次函数f
    //         function f() { console.log('I am inside!'); }
    //       }
    //       f();
    //     }());

    // // 上面代码在ES5中运行，会得到“I am inside!”，但是在ES6中运行，会得到“I am outside!”。这是因为ES5存在函数提升，不管会
    // // 不会进入 if 代码块，函数声明都会提升到当前作用域的顶部，得到执行；而ES6支持块级作用域，不管会不会进入if代码
    // // 块，其内部声明的函数皆不会影响到作用域的外部

    // var age = 10;
    // (function () {
    //   console.log(age);
    // })()


    function f() { console.log('I am outside!'); }
    (function () {
      if (false) {
        // 重复声明一次函数f
        function f() { console.log('I am inside!'); }
      }
      f();
    }());
  </script>
</body>

</html>